﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FW;
using dbiparser;

namespace Kcadastro.classes
{
    public class usuarios
    {
        private fwlog log = (fwlog)ConfigurationManager.GetSection("fwlog");
        //private string constr = ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString();

        kcadDataContext db = new kcadDataContext(ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString());

        private int _iduser;
        private int _idtipo;
        private int _idgrupo;
        private int _idcont;
        private string _msg;

        public usuarios()
        {
            // db = new kcadDataContext(constr);
        }

        public static bool cpfValido(string cpf)
        {
            bool ret = false;

            cpf = cpf.Replace(".", "").Replace("-", "").Replace("/", "");
            if (FW.validador.ValidaCPF(cpf))
            {
                ret = true;
            }
            else
            {
                ret = false;
            }

            return ret;
        }

        public int encontrarCPF(string _cpf)
        {
            int ret = 0;
            if (!db.tb_usuarios.Any(t => t.CPF == _cpf.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "")))
            {
                dbiparser.dbiparser.RFCPF CPF = new dbiparser.dbiparser.RFCPF();
                dbiparser.dbiparser dbi = new dbiparser.dbiparser(ConfigurationManager.AppSettings["wsurl"].ToString(), ConfigurationManager.AppSettings["wslogin"].ToString(), ConfigurationManager.AppSettings["wssenha"].ToString());
                CPF = (dbiparser.dbiparser.RFCPF)dbi.Consulta(4, _cpf, "", "", "", "");

                if (dbi.ERROCONSULTA == null)
                {
                    tb_usuario tu = new tb_usuario();
                    tu.ativo = false;
                    tu.CPF = CPF.CPF.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "");
                    tu.email = "";
                    tu.emailvalidado = false;
                    tu.habilitado = false;
                    tu.nomecompleto = CPF.NOME;
                    tu.primeironome = CPF.NOME.Substring(0, CPF.NOME.IndexOf(' '));
                    tu.senha = "";
                    tu.sobrenome = CPF.NOME.Substring(CPF.NOME.LastIndexOf(' ') + 1);
                    tu.tentativas = 0;
                    tu.tp_user = 1;
                    tu.FK_idgrp = 1;
                    tu.FK_IDemp = 0;
                    tu.jatrial = false;
                    tu.UID = System.Guid.NewGuid();
                    db.tb_usuarios.InsertOnSubmit(tu);
                    db.SubmitChanges();

                    ret = tu.PK_IDuser;

                    cIO io = new cIO();
                    io.NomeArquivo = ConfigurationManager.AppSettings["arqPath"].ToString() + "userCPF/" + _cpf.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "") + ".html";
                    io.Conteudo = CPF.PAGINA;
                    io.GravarArquivo();
                    //io.CriaDir(ConfigurationManager.AppSettings["arqPath"].ToString() + ret.ToString());
                    //io.CriaDir(ConfigurationManager.AppSettings["arqPath"].ToString() + ret.ToString());
                    io = null;
                }
                else
                {
                    ret = 0;
                    _msg = dbi.ERROCONSULTA.CODERRO + " - " + dbi.ERROCONSULTA.ERRODESCRI;
                }
            }
            else
            {
                ret = db.tb_usuarios.Single(t => t.CPF == _cpf.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "")).PK_IDuser;
            }

            return ret;
        }

        public void enviarConfirmacaoEmail(tb_usuario _tu)
        {
            mandaEmail me = (FW.mandaEmail)ConfigurationManager.GetSection("mandaEmail");
            // bool ret = false;
            try
            {
                if (db.tb_usuarios.Any(t => t.PK_IDuser == _tu.PK_IDuser))
                {
                    FW.montaTexto mt = new montaTexto(ConfigurationManager.AppSettings["xmlPath"] + "emailHabilitaEmail.htm");
                    mt.addItem("<!nome!>", _tu.nomecompleto);
                    mt.addItem("<!url!>", string.Format("{0}/redir.aspx?a=he&k={1}", ConfigurationManager.AppSettings["site"].ToString(), _tu.UID.ToString()));
                    mt.trocaTodos();


                    me.TO = _tu.email;

                    //me.TO = _email;
                    me.TITULO = ConfigurationManager.AppSettings["siteNome"].ToString() + " - Validação de E-mail";
                    me.BODY = mt.textotratado;
                    //me.FROM = ConfigurationManager.AppSettings["emaildosite"].ToString();
                    me.enviaMsg();

                    mt = null;


                    log.info("usuarios.confirmarEmail ", _tu.PK_IDuser.ToString(), "");
                    _msg = "Validação de Email enviada";

                    //ret = true;
                }
                else
                {
                    //ret = false;
                    _msg = "Usuário não encontrado.";
                    log.info("usuarios.lembrarSenha - lembrar senha", _tu.PK_IDuser.ToString(), "usuario não existe");
                }

            }
            catch (Exception ex)
            {
                log.erro("usuarios.lembrarSenha", _tu.PK_IDuser.ToString(), ex.Message.ToString());
                _msg = "Erro Interno. Favor entrar em contato com o desenvolvedor. Erro - usuarios.lembrarSenha";
            }
            // cp = null;
            me = null;
            //return ret;
        }

        public bool confirmarEmail(string _k)
        {
            bool ret = false;
            System.Guid gd = new Guid(_k);
            if (db.tb_usuarios.Any(t => t.UID == gd))
            {
                tb_usuario tu = db.tb_usuarios.Single(t => t.UID == gd);
                tu.emailvalidado = true;
                tu.ativo = true;
                db.SubmitChanges();
                ret = true;
                novaSenha(tu.PK_IDuser);
            }
            return ret;
        }

        //TODO: BEGIN SJC
        //DATA: 03/06/2012
        public bool confirmarLeitura(int _pk, bool leu)
        {
            bool ret = false;
            if (db.tb_usuarios.Any(t => t.PK_IDuser == _pk))
            {
                tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _pk);
                tu.leuTermo = leu;
                db.SubmitChanges();
                ret = true;
            }
            return ret;
        }
        //END

        public tb_usuario lerDadosUsuario(int _pk)
        {
            tb_usuario ret = db.tb_usuarios.Single(t => t.PK_IDuser == _pk);

            return ret;
        }
        public tb_usuario lerDadosUsuario(string _cpf)
        {
            _cpf = _cpf.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "");
            int pku = encontrarCPF(_cpf);
            tb_usuario ret = db.tb_usuarios.Single(t => t.PK_IDuser == pku);



            return ret;
        }

        public void updateMeuCadastro(tb_usuario _tu)
        {
            tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _tu.PK_IDuser);
            //tu.ativo = _tu.ativo;
            if (_tu.dt_nasc != null)
                tu.dt_nasc = _tu.dt_nasc;
            //tu.email = _tu.email;
            //tu.emailvalidado = _tu.emailvalidado;
            //tu.FK_IDemp = _tu.FK_IDemp;
            //tu.FK_idgrp = _tu.FK_idgrp;
            //tu.habilitado = _tu.habilitado;
            //tu.nomecompleto = _tu.nomecompleto;
            //tu.primeironome = _tu.primeironome;
            //tu.sobrenome = _tu.sobrenome;
            //tu.tentativas = _tu.tentativas;
            //tu.tp_user = _tu.tp_user;
            db.SubmitChanges();
        }

        public int gravarDadosUsuario(tb_usuario _tu)
        {
            int ret = 0;
            if (!db.tb_usuarios.Any(t => t.PK_IDuser != _tu.PK_IDuser && t.email == _tu.email))
            {
                tb_usuario tu = new tb_usuario();
                if (_tu.PK_IDuser != 0)
                {
                    tu = db.tb_usuarios.Single(t => t.PK_IDuser == _tu.PK_IDuser);
                }

                tu.ativo = _tu.ativo;
                tu.CPF = _tu.CPF;
                tu.dt_nasc = _tu.dt_nasc;
                tu.email = _tu.email;
                tu.emailvalidado = _tu.emailvalidado;
                tu.FK_IDemp = _tu.FK_IDemp;
                tu.FK_idgrp = _tu.FK_idgrp;
                tu.habilitado = _tu.habilitado;
                tu.jatrial = true;
                tu.nomecompleto = _tu.nomecompleto;
                tu.primeironome = _tu.primeironome;
                tu.sobrenome = _tu.sobrenome;
                tu.tentativas = 0;
                tu.tp_user = _tu.tp_user;
                tu.UID = System.Guid.NewGuid();

                if (_tu.PK_IDuser == 0)
                {
                    tu.senha = "";
                    db.tb_usuarios.InsertOnSubmit(tu);
                }
                db.SubmitChanges();
                db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, tu);
                ret = tu.PK_IDuser;
            }
            else
            {
                _msg = "E-mail já cadastrado com diferente CPF. Selecione outro e-mail.";
                log.info("gravarDadosCadstroUsuario", _tu.PK_IDuser.ToString(), "E-mail já cadastrado com diferente CPF. Selecione outro e-mail. " + _tu.email);

                ret = 0;
            }

            return ret;
        }

        public bool gravarDadosCadstroUsuario(tb_usuario _tu, string _etapa)
        {
            bool ret = false;

            if (!db.tb_usuarios.Any(t => t.PK_IDuser != _tu.PK_IDuser && t.email == _tu.email))
            {

                tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _tu.PK_IDuser);
                tu.ativo = _tu.ativo;
                if (_tu.dt_nasc != null)
                    tu.dt_nasc = _tu.dt_nasc;
                tu.email = _tu.email;
                tu.emailvalidado = _tu.emailvalidado;
                tu.FK_IDemp = _tu.FK_IDemp;
                tu.FK_idgrp = _tu.FK_idgrp;
                tu.habilitado = _tu.habilitado;
                tu.nomecompleto = _tu.nomecompleto;
                tu.primeironome = _tu.primeironome;
                tu.sobrenome = _tu.sobrenome;
                tu.tentativas = _tu.tentativas;
                tu.tp_user = _tu.tp_user;
                db.SubmitChanges();

                switch (_etapa)
                {
                    case "P1":
                        // enviarConfirmacaoEmail(tu);
                        break;
                    default:

                        break;
                }
                ret = true;
            }
            else
            {
                _msg = "E-mail já cadastrado com diferente CPF. Selecione outro e-mail.";
                log.info("gravarDadosCadstroUsuario", _tu.PK_IDuser.ToString(), "E-mail já cadastrado com diferente CPF. Selecione outro e-mail. " + _tu.email);
                ret = false;
            }
            return ret;
        }

        public List<tb_grupo> retornaGrupos()
        {
            List<tb_grupo> ret = (from tb in db.tb_grupos
                                  orderby tb.PK_IDgrp
                                  select tb).ToList<tb_grupo>();
            return ret;
        }

        public bool logar(string _usuario, string _senha)
        {
            crypt cp = new crypt();

            bool ret = false;
            try
            {
                if (db.tb_usuarios.Any(t => t.email == _usuario && t.ativo == true))
                {
                    tb_usuario tbu = db.tb_usuarios.Single(t => t.email == _usuario && t.ativo == true);
                    if (tbu.senha == cp.encryptMD5(_senha) && tbu.tentativas <= 3)
                    {
                        HttpContext.Current.Session.Add("IDuser", tbu.PK_IDuser.ToString());
                        HttpContext.Current.Session.Add("IDemp", tbu.FK_IDemp.ToString());
                        _puser = new permissao()
                        {
                            ATIVO = (bool)tbu.ativo,
                            EMAIL = tbu.email,
                            EMAILVERIFICADO = (bool)tbu.emailvalidado,
                            GRPUSER = (int)tbu.FK_idgrp,
                            HABILITADO = (bool)tbu.habilitado,
                            PKIDUSER = tbu.PK_IDuser,
                            TPUSER = (int)tbu.tp_user,
                            //TODO SJC Primeiro Nome Usuario
                            PRIMEIRONOME = (string)tbu.primeironome

                        };
                        HttpContext.Current.Session.Add("Puser", _puser);
                        ret = true;
                        log.info("usuarios.logar - Sucesso", _usuario, "");
                        _msg = "Login efetuado com Sucesso";
                        tbu.tentativas = 0;

                        db.SubmitChanges();
                    }
                    else
                    {
                        // senha errada
                        ret = false;
                        tbu.tentativas = tbu.tentativas + 1;
                        db.SubmitChanges();
                        _msg = "Usuário ou senha invalidos";
                    }
                }
                else
                {
                    ret = false;
                    log.info("usuarios.logar - senha errada", _usuario, "");
                    _msg = "Usuário ou senha invalidos";
                    // usuario nao existe    
                }

            }
            catch (Exception ex)
            {
                log.erro("usuarios.logar", _usuario, ex.Message.ToString());
                _msg = "Erro Interno. Favor entrar em contato com o desenvolvedor. Erro - usuarios.logar";
            }
            cp = null;
            return ret;
        }

        public bool trocarsenha(string _senhanova)
        {
            crypt cp = new crypt();
            //conn cn = new conn(connstr, conntp);
            bool ret = false;
            try
            {
                string pwd = _senhanova;
                string pwdenc = cp.encryptMD5(pwd);

                tb_usuario tbu = db.tb_usuarios.Single(t => t.PK_IDuser == _iduser);
                tbu.tentativas = 0;
                tbu.senha = pwdenc;
                db.SubmitChanges();
            }
            catch (Exception ex)
            {
                log.erro("usuarios.trocarsenha", _iduser.ToString(), ex.Message.ToString());
                _msg = "Erro Interno. Favor entrar em contato com o desenvolvedor. Erro - usuarios.trocarsenha";
            }
            cp = null;
            return ret;
        }

        public bool lembrarSenha(string __cpf, string __email)
        {
            bool ret = false;
            if (db.tb_usuarios.Any(t => t.CPF == __cpf && t.email == __email))
            {
                tb_usuario tu = db.tb_usuarios.Single(t => t.CPF == __cpf && t.email == __email);
                novaSenha(tu.PK_IDuser);
                ret = true;
            }
            return ret;
        }

        public bool novaSenha(int _pk)
        {
            crypt cp = new crypt();
            mandaEmail me = new mandaEmail(ConfigurationManager.AppSettings["mailSMTP"].ToString(), ConfigurationManager.AppSettings["mailUSER"].ToString(), ConfigurationManager.AppSettings["mailSENHA"].ToString());
            me.FROM = ConfigurationManager.AppSettings["mailFROM"].ToString();
            me.FROMNOME = ConfigurationManager.AppSettings["mailFROMNOME"].ToString();
            //    mandaEmail me = (FW.mandaEmail) ConfigurationManager.GetSection("mandaEmail");
            bool ret = false;
            try
            {
                if (db.tb_usuarios.Any(t => t.PK_IDuser == _pk))
                {
                    string pwd = cp.GetPassword();
                    string pwdenc = cp.encryptMD5(pwd);
                    tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _pk);
                    tu.senha = pwdenc;
                    tu.tentativas = 0;
                    db.SubmitChanges();


                    FW.montaTexto mt = new montaTexto(ConfigurationManager.AppSettings["XMLPath"] + "lembrarSenha.htm");
                    mt.addItem("<!nome!>", tu.nomecompleto);
                    mt.addItem("<!senha!>", pwd);
                    mt.addItem("<!url!>", ConfigurationManager.AppSettings["site"].ToString());
                    mt.trocaTodos();


                    me.TO = tu.email;

                    //me.TO = _email;
                    me.TITULO = "[No Reply] Nova Senha de acesso ao Portal KeyConsultas-web";
                    me.BODY = mt.textotratado;
                    //me.FROM = ConfigurationManager.AppSettings["emaildosite"].ToString();
                    me.enviaMsg();

                    mt = null;


                    log.info("usuarios.nova Senha", _pk.ToString(), "");
                    _msg = "E-mail enviado com sua nova senha.";

                    ret = true;
                }
                else
                {
                    ret = false;
                    _msg = "Usuário não encontrado.";
                    log.info("usuarios.nova Senha", _pk.ToString(), "usuario não existe");
                }

            }
            catch (Exception ex)
            {
                log.erro("usuarios.nova Senha", _pk.ToString(), ex.Message.ToString());
                _msg = "Erro Interno. Favor entrar em contato com o desenvolvedor. Erro - usuarios.lembrarSenha";
            }
            cp = null;
            me = null;
            return ret;
        }

        public List<tb_ferramenta> listaMenuUsuario(int _grpuser)
        {
            List<tb_ferramenta> ret = new List<tb_ferramenta>();
            ret = (from tb in db.tb_ferramentas
                   from tbu in db.tb_ferrXgrps
                   where tbu.FK_IDgrp == _grpuser
                   && tbu.FK_IDferr == tb.PK_IDferr
                   && tb.ativa == true
                   && tb.idpai == 0
                   orderby tb.ordem
                   select tb).ToList<tb_ferramenta>();
            return ret;
        }

        public List<tb_ferramenta> listaMenuUsuario(int _grpuser, int _idferr)
        {
            List<tb_ferramenta> ret = new List<tb_ferramenta>();
            ret = (from tb in db.tb_ferramentas
                   from tbu in db.tb_ferrXgrps
                   where tbu.FK_IDgrp == _grpuser
                   && tbu.FK_IDferr == tb.PK_IDferr
                   && tb.idpai == _idferr
                   && tb.ativa == true
                   orderby tb.ordem
                   select tb).ToList<tb_ferramenta>();
            return ret;
        }

        public List<tb_usuario> listarUsuarios()
        {
            List<tb_usuario> ret = (from tb in db.tb_usuarios
                                    select tb).ToList<tb_usuario>();
            return ret;
        }


        #region propriedades
        public int IDTIPO
        {
            get
            {
                return _idtipo;
            }
            set
            {
                _idtipo = value;
            }
        }
        public int IDUSER
        {
            get
            {
                return _iduser;
            }
            set
            {
                _iduser = value;
            }
        }
        private bool _ativo;
        public bool ATIVO
        {
            get
            {
                return _ativo;
            }
            set
            {
                _ativo = value;
            }
        }
        public string MSG
        {
            get
            {
                return _msg;
            }

        }
        private permissao _puser;
        public permissao PUSER
        {
            get
            {
                return _puser;
            }
        }

        public class permissao
        {
            public int PKIDUSER { get; set; }
            public int TPUSER { get; set; }
            public int GRPUSER { get; set; }
            public bool ATIVO { get; set; }
            public bool HABILITADO { get; set; }
            public bool EMAILVERIFICADO { get; set; }
            public string EMAIL { get; set; }
            public string PRIMEIRONOME { get; set; }
        }

        #endregion
    }

    public class empresas
    {
        private fwlog log = (fwlog)ConfigurationManager.GetSection("fwlog");
        //private string constr = ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString();

        kcadDataContext db = new kcadDataContext(ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString());

        private int _idemp;
        private string _msg;
        public string MSG { get { return _msg; } }

        public empresas()
        { }

        public tb_empresa dadosEmpresa(int _idemp)
        {
            tb_empresa ret = new tb_empresa();

            if (db.tb_empresas.Any(t => t.PK_IDemp == _idemp))
            {
                ret = db.tb_empresas.Single(t => t.PK_IDemp == _idemp);
            }

            return ret;
        }

        public List<tb_empresa> listarEmpresas()
        {
            List<tb_empresa> ret = (from tb in db.tb_empresas
                                    select tb).ToList<tb_empresa>();
            return ret;
        }

        public List<tb_usuario> listarUsuariosEmpresa(int _idemp)
        {
            List<tb_usuario> ret = (from tb in db.tb_usuarios
                                    where tb.FK_IDemp == _idemp
                                    select tb).ToList<tb_usuario>();
            return ret;
        }

        public void gravarEmpresa(tb_empresa _te)
        {
            if (db.tb_empresas.Any(t => t.PK_IDemp == _te.PK_IDemp))
            {
                tb_empresa te = db.tb_empresas.Single(t => t.PK_IDemp == _te.PK_IDemp);
                te.contato = _te.contato;
                te.emailcob = _te.emailcob;
                te.emailcontato = _te.emailcontato;
                te.url = _te.url;
                te.telefone = _te.telefone;
                te.contratoQtd = _te.contratoQtd;
                te.contratoTipo = _te.contratoTipo;
                te.contratoValor = _te.contratoValor;
                db.SubmitChanges();
            }
        }

        public int gravarEmpresaTotal(tb_empresa _te)
        {
            int ret = 0;
            tb_empresa tbe = new tb_empresa();
            if (_te.PK_IDemp != 0)
            {
                tbe = db.tb_empresas.Single(t => t.PK_IDemp == _te.PK_IDemp);
            }

            tbe.bairro = _te.bairro;
            tbe.CEP = _te.CEP;
            tbe.cidade = _te.cidade;
            tbe.CNAE = _te.CNAE;
            tbe.CNAEdescri = _te.CNAEdescri;
            tbe.CNJ = _te.CNJ;
            tbe.CNJdescri = _te.CNJdescri;
            tbe.CNPJ = _te.CNPJ;
            tbe.complemento = _te.complemento;
            tbe.contato = _te.contato;
            tbe.contratoQtd = _te.contratoQtd;
            tbe.contratoTipo = _te.contratoTipo;
            tbe.contratoValor = _te.contratoValor;
            tbe.desconto = _te.desconto;
            tbe.dt_abertura = _te.dt_abertura;
            tbe.dt_reg = _te.dt_reg;
            tbe.emailcob = _te.emailcob;
            tbe.emailcontato = _te.emailcontato;
            tbe.endereco = _te.endereco;
            tbe.fantasia = _te.fantasia;
            tbe.numero = _te.numero;
            tbe.RS = _te.RS;
            tbe.situacao = _te.situacao;
            tbe.telefone = _te.telefone;
            tbe.telefone2 = _te.telefone2;
            tbe.telefoneContato = _te.telefoneContato;
            tbe.UF = _te.UF;
            tbe.url = _te.url;

            if (_te.PK_IDemp == 0)
            {
                db.tb_empresas.InsertOnSubmit(tbe);
            }
            db.SubmitChanges();
            db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, tbe);
            ret = tbe.PK_IDemp;

            return ret;
        }

        public void updateEmpresa(tb_empresa _te)
        {
            if (db.tb_empresas.Any(t => t.PK_IDemp == _te.PK_IDemp))
            {
                tb_empresa te = db.tb_empresas.Single(t => t.PK_IDemp == _te.PK_IDemp);
                te.contato = _te.contato;
                te.emailcob = _te.emailcob;
                te.emailcontato = _te.emailcontato;
                te.url = _te.url;
                te.telefone = _te.telefone;
                //te.contratoQtd = _te.contratoQtd;
                //te.contratoTipo = _te.contratoTipo;
                //te.contratoValor = _te.contratoValor;
                db.SubmitChanges();
            }
        }

        public void associarEmpresaUsuario(int _idemp, int _iduser)
        {
            tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _iduser);
            tu.habilitado = true;
            tu.FK_IDemp = _idemp;
            db.SubmitChanges();
        }

        public int encontrarEmpresaPorUsuario(int _iduser)
        {
            int ret = 0;
            //if (db.tb_usuarios.Single(t => t.PK_IDuser == _iduser).FK_IDemp
            ret = (int)db.tb_usuarios.Single(t => t.PK_IDuser == _iduser).FK_IDemp;
            return ret;
        }

        public int encontrarCNPJ(string _cnpj)
        {
            int ret = 0;
            if (!db.tb_empresas.Any(t => t.CNPJ == _cnpj.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "")))
            {
                dbiparser.dbiparser.RFCNPJ CNPJ = new dbiparser.dbiparser.RFCNPJ();
                dbiparser.dbiparser dbi = new dbiparser.dbiparser(ConfigurationManager.AppSettings["wsurl"].ToString(), ConfigurationManager.AppSettings["wslogin"].ToString(), ConfigurationManager.AppSettings["wssenha"].ToString());
                CNPJ = (dbiparser.dbiparser.RFCNPJ)dbi.Consulta(3, _cnpj, "", "", "", "");

                if (dbi.ERROCONSULTA == null)
                {
                    tb_empresa te = new tb_empresa();
                    te.CNPJ = CNPJ.CNPJ.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "");
                    te.bairro = CNPJ.BAIRRO;
                    te.CEP = CNPJ.CEP;
                    te.cidade = CNPJ.CIDADE;
                    te.CNAE = CNPJ.CODIGOAE;
                    te.CNAEdescri = CNPJ.DESCRICAOAE;
                    te.CNJ = CNPJ.CODIGONJ;
                    te.CNJdescri = CNPJ.DESCRICAONJ;
                    te.complemento = CNPJ.COMPLEMENTO;
                    te.dt_abertura = (DateTime)CNPJ.DATAABERTURA;
                    te.endereco = CNPJ.LOGRADOURO;
                    te.fantasia = CNPJ.NOMEFANTASIA;
                    te.numero = CNPJ.NUMERO;
                    te.RS = CNPJ.RAZAOSOCIAL;
                    te.situacao = CNPJ.SITUACAO;
                    te.UF = CNPJ.ESTADO;
                    te.telefone = "";
                    te.telefone2 = "";
                    te.telefoneContato = "";
                    te.url = "";
                    te.contato = "";
                    te.emailcob = "";
                    te.emailcontato = "";
                    te.contratoTipo = 1;
                    te.contratoQtd = 0;
                    te.contratoValor = 0;
                    te.dt_reg = DateTime.Now;


                    db.tb_empresas.InsertOnSubmit(te);
                    db.SubmitChanges();

                    ret = te.PK_IDemp;

                    cIO io = new cIO();
                    io.NomeArquivo = ConfigurationManager.AppSettings["arqPath"].ToString() + "userCPF/" + _cnpj.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "") + ".html";
                    io.Conteudo = CNPJ.PAGINA;
                    io.GravarArquivo();
                    io = null;
                }
                else
                {
                    _msg = dbi.ERROCONSULTA.CODERRO + " - " + dbi.ERROCONSULTA.ERRODESCRI;
                }
            }
            else
            {
                ret = db.tb_empresas.Single(t => t.CNPJ == _cnpj.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "")).PK_IDemp;
            }

            return ret;
        }


        public bool regraNegocio(int __idemp, int _qtdreg)
        {
            bool ret = false;
            tb_empresa te = db.tb_empresas.Single(t => t.PK_IDemp == __idemp);
            qtdctto = 0;
            qtdmes = 0;
            tpctto = (int)te.contratoTipo;
            qtdctto = (long)te.contratoQtd;
            switch (te.contratoTipo)
            {
                case 1: // valor fixo mensal
                    qtdctto = (long)te.contratoQtd;

                    var tqm = ((from tb in db.tb_os_resumos
                                from tbo in db.tb_os
                                where tb.FK_IDos == tbo.PK_IDos
                                && tbo.FK_IDemp == __idemp
                                && tbo.dt_reg.Value.Month == DateTime.Now.Month
                                && tbo.dt_reg.Value.Year == DateTime.Now.Year
                                select tb.qtdregistros
                               ).Sum());

                    if (tqm == null)
                    {
                        qtdmes = 0;
                    }
                    else
                    {
                        qtdmes = (long)tqm;
                    }

                    var tqc = (from tb in db.tb_cunis
                               where tb.FK_IDemp == __idemp
                               && tb.DataCuni.Value.Month == DateTime.Now.Month
                               && tb.DataCuni.Value.Year == DateTime.Now.Year
                               select tb.PK_IDcuni).Count();
                    if (tqc == null)
                    {
                        qtdcuni = 0;
                    }
                    else
                    {
                        qtdcuni = (long)tqc;
                        qtdmes = qtdmes + qtdcuni;
                    }


                    if ((qtdmes + _qtdreg) <= (qtdctto + (qtdctto * 0.1)))
                    {
                        ret = true;
                        _msg = "";
                    }
                    else
                    {
                        _msg = "Esta OS estoura a quantidade de registros contratados por mês";
                    }

                    break;
                case 2: // on Demand
                    ret = true;
                    break;
                case 3: // Pré Pago
                    qtdctto = (long)te.contratoQtd;
                    var tqm3 = ((from tb in db.tb_os_resumos
                                 from tbo in db.tb_os
                                 where tb.FK_IDos == tbo.PK_IDos
                                 && tbo.FK_IDemp == __idemp
                                 //&& tbo.dt_reg.Value.Month == DateTime.Now.Month 
                                 //&& tbo.dt_reg.Value.Year == DateTime.Now.Year 
                                 select tb.qtdregistros
                               ).Sum());
                    if (tqm3 == null)
                    {
                        qtdmes = 0;
                    }
                    else
                    {
                        qtdmes = (long)tqm3;
                    }

                    var tqc2 = (from tb in db.tb_cunis
                                where tb.FK_IDemp == __idemp
                                //&& tb.DataCuni.Value.Month == DateTime.Now.Month
                                //&& tb.DataCuni.Value.Year == DateTime.Now.Year
                                select tb.PK_IDcuni).Count();
                    if (tqc2 == null)
                    {
                        qtdcuni = 0;
                    }
                    else
                    {
                        qtdcuni = (long)tqc2;
                        qtdmes = qtdmes + qtdcuni;
                    }

                    if ((qtdmes + _qtdreg) <= (qtdctto + (qtdctto * 0.1)))
                    {
                        ret = true;
                        _msg = "";
                    }
                    else
                    {
                        _msg = "Esta OS estoura a quantidade de registros contratados";
                    }
                    break;
                //qtdcons = qtdmes;
            }

            return ret;
        }

        private int tpctto;
        public int TPCTTO { get { return tpctto; } }

        private long qtdctto;
        public long QTDCTTO { get { return qtdctto; } }

        private long qtdmes;
        private long qtdcuni;
        // private long qtdcons;

        public long QTDMES { get { return qtdmes; } }
        // public long QTDCONS { get { return qtdcons; } }

    }

    public class seguranca
    {
        kcadDataContext db = new kcadDataContext(ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString());

        public seguranca() { }

        public static bool aplicSegur(int _ferr)
        {

            kcadDataContext db = new kcadDataContext(ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString());

            bool ret = false;

            if (HttpContext.Current.Session["IDuser"] != null)
            {
                if (HttpContext.Current.Session["IDuser"].ToString() != "")
                {
                    int _iduser = Convert.ToInt16(HttpContext.Current.Session["IDuser"].ToString());
                    var res = from tb in db.tb_usuarios
                              from tbgf in db.tb_ferrXgrps
                              where tb.FK_idgrp == tbgf.FK_IDgrp
                              && tb.PK_IDuser == _iduser
                              && tbgf.FK_IDferr == _ferr
                              select new
                              {
                                  tbgf.PK_IDfxg
                              };
                    if (res.Count() != 0)
                    {
                        ret = true;
                    }
                }
            }


            return ret;
        }

        //TODO: BEGIN SJC
        //DATA: 03/06/2012
        public static bool leuTermo()
        {

            kcadDataContext db = new kcadDataContext(ConfigurationManager.ConnectionStrings["KcadConnectionString"].ToString());

            bool ret = false;

            if (HttpContext.Current.Session["IDuser"] != null)
            {
                if (HttpContext.Current.Session["IDuser"].ToString() != "")
                {
                    int _iduser = Convert.ToInt16(HttpContext.Current.Session["IDuser"].ToString());

                    if (db.tb_usuarios.Any(t => t.PK_IDuser == _iduser))
                    {
                        tb_usuario tu = db.tb_usuarios.Single(t => t.PK_IDuser == _iduser);
                        if (tu.leuTermo != null)
                            ret = tu.leuTermo.Value;
                    }
                }
            }

            return ret;
        }
        //END

    }
}